# -*- coding: utf-8 -*-

## \package f_export.ftarget

# MIT licensing
# See: docs/LICENSE.txt


import wx

from input.pathctrl	import PathCtrl
from input.toggle	import CheckBox
from ui.layout		import BoxSizer
from ui.panel		import BorderedPanel
from ui.style		import layout as lyt


## A class that defines a standard target check box & custom target text input area
#
#  \param defaultPath
#	Default install target
#  \param win_id
#	Window ID
#  \param defaultType
#	Should be either \b \e CheckBox or derived class
#  \param defaultValue
#	\b \e Boolean to set default path check box value to checked or not (default is True)
#  \param customType
#	Should be wx.TextCtrl or derived class
class FileOTarget(BorderedPanel):
	def __init__(self, parent, defaultPath, win_id=-1, defaultType=CheckBox, defaultValue=True,
			customType=PathCtrl, name=u'file_output_target', pathIds=[]):

		BorderedPanel.__init__(self, parent, win_id, name=name)

		id_default = wx.ID_ANY
		id_custom = wx.ID_ANY

		if pathIds:
			if isinstance(pathIds, int):
				id_default = pathIds

			else:
				id_default = pathIds[0]

				if len(pathIds) > 1:
					id_custom = pathIds[1]

		self.PathDefault = defaultType(self, id_default, defaultPath, defaultValue=defaultValue)

		self.PathCustom = customType(self, id_custom)

		# *** Event Handing *** #

		self.PathDefault.Bind(wx.EVT_CHECKBOX, self.OnSelectTarget)

		# *** Layout *** #

		lyt_main = BoxSizer(wx.VERTICAL)

		lyt_main.AddSpacer(5)
		lyt_main.Add(self.PathDefault, 0, lyt.PAD_LR, 5)
		lyt_main.AddSpacer(5)
		lyt_main.Add(self.PathCustom, 0, wx.EXPAND|lyt.PAD_LR, 5)
		lyt_main.AddSpacer(5)

		self.SetAutoLayout(True)
		self.SetSizer(lyt_main)
		self.Layout()

		# *** Post Layout/Event Actions *** #

		self.PathDefault.SetChecked(self.PathDefault.GetDefaultValue())


	## Retrieves the custom set target path
	def GetCustomPath(self):
		return self.PathCustom.GetValue()


	## Retrieves the object representing the default path
	def GetDefaultObject(self):
		return self.PathDefault


	## Retrieves the default target path
	def GetDefaultPath(self):
		return self.PathDefault.GetLabel()


	## Retrieves currently selected path
	def GetPath(self):
		if self.PathDefault.GetValue():
			return self.GetDefaultPath()

		return self.GetCustomPath()


	## Enables/Disables custom target field
	def OnSelectTarget(self, event=None):
		self.PathCustom.Enable(not self.PathDefault.GetValue())

		if event:
			event.Skip(True)


	## Reset controls to default settings
	def Reset(self):
		self.PathDefault.Reset()
		self.PathCustom.Reset()


	## Selects custom path & sets value
	#
	#  \param path
	#	New value for custom path
	#  \return
	#	\b \e True if using custom path & is equal to 'path' parameter
	def SetPath(self, path):
		if self.PathDefault.GetValue():
			self.PathDefault.SetChecked(False)

		self.PathCustom.SetValue(path)

		return self.PathCustom.GetValue() == path and not self.PathDefault.GetValue()


	## Check if using default path
	def UsingDefault(self):
		return self.PathDefault.GetValue()
